Package servlets

Source Code of servlets.UpdateReservation

/**
* The user can update his reservation based on his Reservation ID
*
* @author Sandu Andreea & Morozan Ion
*/
package servlets;

import classes.HotelReservation;
import javax.servlet.http.HttpSession;
import classes.DAO;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import java.io.IOException;
import java.io.StringReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;

public class UpdateReservation extends HttpServlet {

    private String Rid;
    private String Rstart;
    private String Rend;
    private String RroomId;
    private String RnrOfPers;
    private String Rdesc;
    private String Rname;
    private String Remail;

    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        getServletContext().getRequestDispatcher("/WEB-INF/reservations.jsp").forward(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String reservationId = request.getParameter("reservationid");
        String aDate = request.getParameter("adate");
        String rDate = request.getParameter("rdate");
        String updateReservation = request.getParameter("updateReservation");

        /* instance of database */
        DAO dao = DAO.getInstance();

        /*current date*/
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();

        /*useful to extract the current user*/
        HttpSession session = request.getSession(false);
        String username = (String) session.getAttribute("username");

        /* if user press the Update Reservation Button */
        if (updateReservation != null) {
            /* all fields must be filled && and reservation id must match with the one from DB*/
            if (reservationId.isEmpty() || aDate.isEmpty() || rDate.isEmpty()
                    || dao.ofy().find(HotelReservation.class, reservationId) == null) {
                request.setAttribute("errorMessage", "<font size=\"2\" "
                        + "face=\"arial\" color=\"red\">"
                        + "Invalid Reservation id! <br/>"
                        + "</font>");
                RequestDispatcher rd = request.getRequestDispatcher("reservations.jsp");
                rd.forward(request, response);
                /* The date must be in a logical order*/
            } else if ((aDate.compareTo(rDate) > 0)
                    || (aDate.compareTo(dateFormat.format(date).toString()) <= 0)) {
                request.setAttribute("errorMessage", "<font size=\"2\" "
                        + "face=\"arial\" color=\"red\">"
                        + "Wrong Date! <br/>"
                        + "</font>");
                RequestDispatcher rd = request.getRequestDispatcher("reservations.jsp");
                rd.forward(request, response);
            } else {
                /*
                 * PUT method
                 */
                /* extract from the DB the reservation that the user want to update*/
                HotelReservation HR = dao.ofy().find(HotelReservation.class, reservationId);

                /*create the query link*/
                String link = "http://mdwhotel.appspot.com/api/v1/reservation/?res_id=";
                link += reservationId + "&start=" + aDate + "&end=" + rDate + "&email=" + HR.getEmail();

                Client client = Client.create();
                WebResource webResource = client.resource(link);
                webResource.accept("application/xml");
                /*invoke the call*/
                String resp = webResource.put(String.class);

                /* if the application sends me back an XML who contains this message
                 * means that they don't have available rooms between thhose dates
                 * and I'm not deleting the reservation that he made before
                 */
                if (!resp.contains("Sorry - the room is not free in these days")) {

                    /*delete the last reservation because they will send to me anotherone*/
                    dao.ofy().delete(HR);
                    /* parse the XML file that I receive from them*/
                    StringToXML(resp);
                    /* set the new information of the reservation*/
                    HR.setStart(Rstart);
                    HR.setEnd(Rend);
                    HR.setDesc(Rdesc);
                    HR.setEmail(Remail);
                    HR.setId(Rid);
                    HR.setName(Rname);
                    HR.setRoomId(RroomId);
                    HR.setNrOfPers(RnrOfPers);
                    dao.put(HR);
                } else {
                    /* if they don't have available rooms between those date
                     * a message retrun
                     */
                    request.setAttribute("errorMessage", "<font size=\"2\" "
                            + "face=\"arial\" color=\"red\">"
                            + "No aviable rooms!<br/>"
                            + "</font>");
                }
                /* successful */
                request.setAttribute("errorMessage", "<font size=\"2\" "
                        + "face=\"arial\" color=\"green\">"
                        + "Reservation successfully updated!<br/>"
                        + "</font>");
                RequestDispatcher rd = request.getRequestDispatcher("reservations.jsp");
                rd.forward(request, response);
                response.sendRedirect("reservations.jsp");
            }
            /* if delete reservation button is pressed*/
            /* verify if the id is correct */
        } else if (reservationId.isEmpty()
                || dao.ofy().find(HotelReservation.class, reservationId) == null) {
            request.setAttribute("errorMessage", "<font size=\"2\" "
                    + "face=\"arial\" color=\"red\">"
                    + "Invalid Reservation id! <br/>"
                    + "</font>");
            RequestDispatcher rd = request.getRequestDispatcher("reservations.jsp");
            rd.forward(request, response);
        } else {
            /*
             * DELETE method
             */
            /* extract the desired reservation from DB*/
            HotelReservation HR = dao.ofy().find(HotelReservation.class, reservationId);

            /* create the query link */
            String link = "http://mdwhotel.appspot.com/api/v1/reservation/?res_id=";
            link += reservationId + "&email=" + HR.getEmail();


            Client client = Client.create();
            WebResource webResource = client.resource(link);
            webResource.accept("application/xml");
            /*invoke method */
            String resp = webResource.delete(String.class);

            /*delete the reservation from the DB*/
            dao.ofy().delete(HotelReservation.class, reservationId);
            /* successful */
            request.setAttribute("errorMessage", "<font size=\"2\" "
                    + "face=\"arial\" color=\"green\">"
                    + "Reservation successfully deleted!<br/>"
                    + "</font>");

            RequestDispatcher rd = request.getRequestDispatcher("reservations.jsp");
            rd.forward(request, response);
            response.sendRedirect("reservations.jsp");

        }
    }
    /**
     * Parse the xml file and extract the desired fields
     * @param xmlString = xml file receive from the remote application
     */
    protected void StringToXML(String xmlString) {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder;
        try {

            builder = factory.newDocumentBuilder();
            // Use String reader
            Document doc = builder.parse(new InputSource(new StringReader(xmlString)));

            doc.getDocumentElement().normalize();
            NodeList nList = doc.getElementsByTagName("reservation");

            for (int temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;

                    Rid = getTagValue("id", eElement);
                    Rstart = getTagValue("start", eElement);
                    Rend = getTagValue("end", eElement);
                    RroomId = getTagValue("roomId", eElement);
                    RnrOfPers = getTagValue("nrOfPersons", eElement);
                    Rdesc = getTagValue("description", eElement);
                    Rname = getTagValue("username", eElement);
                    Remail = getTagValue("email", eElement);
                }
            }
        } catch (Exception e) {
            System.out.println("Eroare la parsare XML ");
        }
    }
    /*
     * Extract the Tag and what contains
     */
    private static String getTagValue(String sTag, Element eElement) {
        NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

        Node nValue = (Node) nlList.item(0);

        return nValue.getNodeValue();
    }
}
TOP

Related Classes of servlets.UpdateReservation

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.